home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
TPUG - Toronto PET Users Group
/
TPUG Users Group CD
/
TPUG Users Group CD.iso
/
AMIGA
/
(A)G
/
(A)G11.ADF
/
Wordsearch
/
ws
< prev
Wrap
Text File
|
1989-08-17
|
14KB
|
425 lines
ON BREAK GOSUB quit:BREAK ON
GOTO setup
'==========================================================
'== doboard ===============================================
'==========================================================
doboard:
LINE (146,21)-(489,137),2,bf
x=(80-2*wide)/2:y=10-high/2
LINE (8*(x-1)+2,8*(y-1)+5)-STEP(16*wide+2,8*(high+1)-4),0,bf
LINE (8*(x-1)+4,8*(y-1)+6)-STEP(16*wide-2,8*(high+1)-6),2,bf
LINE (8*(x-1)+6,8*(y-1)+7)-STEP(16*wide-6,8*(high+1)-8),0,bf
'==========================================================
'== get puzzle ============================================
'==========================================================
getpuzzle:
CALL buttonup
SOUND 800,.7,255:SOUND 1000,.5,255,1
maxlength=high-2
msgbox -1,24,2,3,"Setting up new puzzle, hang in there or click mouse to stop..."
'== erase old puzzle ======================================
FOR i=1 TO high:puzzle$(i)=SPACE$(3*wide):NEXT
'== get words =============================================
LINE (0,163)-STEP(630,16),2,bf
msgbox 31,22,2,3," Fitting word # "
RANDOMIZE TIMER
count=1
nextword:
LOCATE 22,47:PRINT USING "##";count
word$(count)=UCASE$(wordlist$(RND*vocabulary+1))
IF LEN(word$(count))>maxlength THEN nextword
FOR i=1 TO count-1
IF word$(count)=word$(i) THEN word$(count)=""
NEXT
IF word$(count)="" THEN nextword
SOUND count*300/words+150,.7,100:SOUND 1.5*(count*300/words+150),.5,100,1
'== fit words into puzzle =================================
startime#=TIMER
direction:
xdir=INT(3*RND-1):ydir=INT(3*RND-1)
IF xdir=0 AND ydir=0 THEN direction
startplace:
IF TIMER>startime#+5 THEN nextword
wordx=INT(RND*wide+1):wordy=INT(RND*high+1)
place=1:startx=wordx:starty=wordy
anotherletter:
IF count>1 AND MOUSE(0)>0 THEN
IF toomany=0 THEN
m=-1*(words=8)-2*(words=12)-3*(words=17)-4*(words=22)
toomany=words
END IF
MENU 2,m,1
words=count-1
GOTO abort
END IF
msg$=MID$(puzzle$(wordy),3*(wordx),1)
IF msg$<>" " AND msg$<>MID$(word$(i),place,1) THEN startplace
place=place+1:wordx=xdir+wordx:wordy=ydir+wordy
IF wordx<1 OR wordx>wide OR wordy<1 OR wordy>high THEN startplace
IF place<=LEN(word$(i)) THEN anotherletter
FOR place=0 TO LEN(word$(i))-1
MID$(puzzle$(place*ydir+starty),3*(place*xdir+startx)-1,1)="*"
MID$(puzzle$(place*ydir+starty),3*(place*xdir+startx),1)=MID$(word$(i),place+1,1)
NEXT
abort:
count=count+1:IF count<=words THEN nextword
'== fill unused squares with random letters ===============
FOR i=1 TO high
FOR j=1 TO wide
IF MID$(puzzle$(i),3*j,1)=" " THEN MID$(puzzle$(i),3*j,1)=CHR$(INT(RND*25+66))
NEXT
NEXT
'== sort words alphabetically =============================
LINE (7,31)-STEP(110,120),0,bf
LINE (512,31)-STEP(110,56),0,bf
COLOR 2,0
FOR i=1 TO words-1
FOR j=i+1 TO words
IF word$(i)>word$(j) THEN SWAP word$(i),word$(j)
NEXT
IF i<16 THEN LOCATE i+4,3 ELSE LOCATE i-11,66
PRINT word$(i):wordon(i)=0
NEXT
IF i<16 THEN LOCATE i+4,3 ELSE LOCATE i-11,66
PRINT word$(i):wordon(i)=0
'== more screen set-up ====================================
msgbox -1,24,2,3," "
COLOR 2,0
FOR i=1 TO high
FOR j=1 TO wide
LOCATE i+y,x+j*2-1:PRINT MID$(puzzle$(i),3*j,1)
NEXT
NEXT
LINE (0,163)-(630,179),2,bf
msgbox 30,22,2,3," Time used = "
startime#=TIMER
'==========================================================
'== puzzle loop ===========================================
'==========================================================
puzzleloop:
CALL buttonup
WHILE MOUSE(0)=0 AND mflag=0
COLOR 2,3:LOCATE 22,44:PRINT USING "###.#";TIMER-startime#
IF TIMER-startime#>999.9 THEN
SOUND 100,3,255:SOUND 98,3,255,1
msgbox -1,24,2,3,"I feel so sorry for you, I'm going to reset your score"
startime#=TIMER
END IF
WEND
IF mflag=-1 THEN mflag=0:GOTO doboard
mousex=MOUSE(3):mousey=MOUSE(4)
IF mousey<5 AND mousex<10 THEN quit
IF mousex>7 AND mousex<117 THEN
IF mousey>31 AND mousey<151 THEN
i=(mousey-3)/8-3
IF i<=words THEN
wordon(i)=-1-wordon(i)
IF wordon(i) THEN COLOR 1,0 ELSE COLOR 2,0
LOCATE i+4,3:PRINT word$(i)
END IF
END IF
END IF
IF mousex>512 AND mousex<622 THEN
IF mousey>31 AND mousey<87 THEN
i=(mousey-3)/8+12
IF i<=words THEN
wordon(i)=-1-wordon(i)
IF wordon(i) THEN COLOR 1,0 ELSE COLOR 2,0
LOCATE i-11,66:PRINT word$(i)
END IF
END IF
IF mousey>91 AND mousey<107 THEN goodgrades
IF mousey>107 AND mousey<123 THEN getpuzzle
IF mousey>123 AND mousey<139 THEN GOSUB paper:GOTO puzzleloop
IF mousey>139 AND mousey<155 THEN show
END IF
letterx=INT((mousex/8-x)/2)+1:lettery=INT(mousey/8-y)+1
IF letterx<1 OR lettery<1 OR letterx>wide OR lettery>high THEN puzzleloop
SOUND 500,.5,150:SOUND 625,.3,150,1
IF MID$(puzzle$(lettery),3*letterx-2,1)=" " THEN
MID$(puzzle$(lettery),3*letterx-2,1)="*"
COLOR 3,0
ELSE
MID$(puzzle$(lettery),3*letterx-2,1)=" "
COLOR 2,0
END IF
LOCATE lettery+y,2*letterx+x-1:PRINT MID$(puzzle$(lettery),3*letterx,1)
GOTO puzzleloop
'==========================================================
'== grading the system ====================================
'==========================================================
goodgrades:
endtime#=TIMER-startime#
SOUND 1000,.7,255:SOUND 1250,.5,255,1
msgbox -1,22,2,3," "
msgbox -1,24,2,3,"OK, let's see how you did... "
right=0:wrong=0
FOR i=1 TO high
FOR j=1 TO wide
IF MID$(puzzle$(i),3*j-2,2)=" " THEN COLOR 2,0
IF MID$(puzzle$(i),3*j-2,2)="* " THEN wrong=wrong+1:COLOR 3,1
IF MID$(puzzle$(i),3*j-2,2)=" *" THEN wrong=wrong+1:COLOR 3,0
IF MID$(puzzle$(i),3*j-2,2)="**" THEN right=right+1:COLOR 1,0
LOCATE i+y,x+j*2-1:PRINT MID$(puzzle$(i),3*j,1)
NEXT
NEXT
COLOR 2,3:LINE (0,164)-STEP(630,16),2,bf
button 2,22,2,0,5:button 9,22,2,3,9:button 20,22,2,0,4
button 26,22,2,3,9:button 37,22,2,0,4:button 43,22,2,3,9
button 54,22,2,0,4:button 60,22,2,3,13:button 75,22,2,0,4
LOCATE 22,9:PRINT "Right:";:PRINT USING "###";right
LOCATE 22,26:PRINT "Wrong:";:PRINT USING "###";wrong
LOCATE 22,43:PRINT "Time:";:PRINT USING "####";endtime#
LOCATE 22,60:PRINT "Score:";:PRINT USING "#######";1000*right/(wrong+1)-INT(endtime#)
IF wrong=0 THEN
msgbox -1,24,2,3,"Perfect! (Is somebody helping you?)"
FOR i=1 TO 150
SOUND 400+200*SIN(i/6),1,,0
SOUND 400+200*SIN(i/6)+2,1,,1
NEXT
END IF
msgbox -1,24,2,3,"Click mouse to continue"
CALL whoa
mousex=MOUSE(3):mousey=MOUSE(4)
IF mousex>500 AND mousex<612 THEN
IF mousey>123 AND mousey<139 THEN SOUND 640,.7,255:SOUND 800,.5,255,1:GOSUB paper:GOTO puzzleloop
IF mousey>139 AND mousey<155 THEN SOUND 512,.7,255:SOUND 640,.5,255,1:GOTO quit
END IF
msgbox -1,24,2,3,""
GOTO getpuzzle
'==========================================================
'== paper =================================================
'==========================================================
paper:
endtime#=TIMER-startime#
SOUND 640,.7,255:SOUND 800,.5,255,1
msgbox -1,24,2,3,"Position paper then click mouse to continue."
CALL whoa
msgbox -1,24,2,3,""
gohere:
LPRINT:LPRINT
LPRINT TAB(19);STRING$(41,42)
LPRINT TAB(19);"* W O R D S E A R C H *"
LPRINT TAB(19);"* find the hidden words in the puzzle *"
LPRINT TAB(19);STRING$(41,42)
LPRINT
FOR i=1 TO high
LPRINT TAB(5);
IF 2*i<=words THEN LPRINT word$(i);
LPRINT TAB(40-wide);
FOR j=1 TO wide
LPRINT MID$(puzzle$(i),3*j,1)" ";
NEXT
IF 2*i<=words+1 THEN LPRINT TAB(63);word$(i+INT(words/2));
LPRINT ""
NEXT
msgbox -1,24,2,3,"Click down here for formfeed, or anywhere else to continue."
CALL whoa:mousey=MOUSE(4):IF mousey>179 THEN LPRINT CHR$(12);
msgbox -1,24,2,3,""
startime#=TIMER-endtime#
GOTO puzzleloop
'==========================================================
'== deal with menu selection ==============================
'==========================================================
menu0:
m=MENU(0):IF m>1 THEN mflag=-1
ON m GOTO menu1,menu2,menu3
menu1:
m=MENU(1):ON m GOTO newcolors,show,quit
menu2:
IF toomany>0 THEN words=toomany:toomany=0
m=-1*(words=8)-2*(words=12)-3*(words=17)-4*(words=22)
MENU 2,m,1
m=MENU(1):words=-8*(m=1)-12*(m=2)-17*(m=3)-22*(m=4)
MENU 2,m,2
RETURN
menu3:
MENU 3,high/2-4,1
m=MENU(1):high=2*m+8:wide=4*m+9
MENU 3,m,2
RETURN
'==========================================================
newcolors:
docolors
RETURN
slowquit:
msgbox -1,24,0,2,"SlowQuit... Click mouse to exit"
SOUND 100,5,255,0:SOUND 50,5,255,1:whoa
show:
listflag=-1
quit:
MENU RESET
FOR i=0 TO WINDOW(6):PALETTE i,rgb(i,0)/16,rgb(i,1)/16,rgb(i,2)/16:NEXT
IF NOT debug THEN
FOR freq=1200 TO 100 STEP -10
SOUND freq,.3,255,0:SOUND 1.25*freq,.3,255,1
NEXT
WINDOW 9,,(236,89)-(236+160,89+7),0
COLOR 3,2:CLS:PRINT " john everett":PRINT "PeopleLINK ID OHS303";
SOUND 200,50,255,0:SOUND 250,50,255,1
SOUND 300,50,255,2:SOUND 400,50,255,3
END IF
WINDOW CLOSE 2
IF NOT debug THEN quit!=TIMER+3:WHILE TIMER<quit!:WEND
WINDOW CLOSE 9
REM $ignore on
IF listflag THEN LIST
REM $ignore off
SOUND 1600,1,255,0:SOUND 2000,1,255,1
SOUND 100,2,255,0:SOUND 125,2,255,1
IF listflag THEN CLEAR ,25000:END
CLEAR ,25000
SYSTEM
'==========================================================
'== set-up ================================================
'==========================================================
setup:
CLEAR,25000:CLEAR,48000&
DEFINT a-z:debug=0:mousex=0:mousey=0
WINDOW CLOSE 1:WINDOW 2,"",,16
COLOR 1,2:CLS
LINE (3,9)-STEP(120,148),0,bf
LINE (5,10)-STEP(116,146),2,bf
LINE (7,11)-STEP(112,144),0,bf
msgbox 3, 3,3,2,"HIDDEN WORDS"
msgbox 22,2,2,1," "
msgbox 28,2,2,1," W O R D S E A R C H "
msgbox 55,2,2,1," "
LINE (507,9)-STEP(120,148),0,bf
LINE (509,10)-STEP(116,146),2,bf
LINE (511,11)-STEP(112,144),0,bf
msgbox 66, 3,3,2," MORE WORDS "
msgbox 66,13,3,2,"CHECK PUZZLE"
msgbox 66,15,3,2," NEW PUZZLE "
msgbox 66,17,3,2,"PRINT PUZZLE"
msgbox 66,19,3,2," QUIT GAME "
msgbox 22,19,2,0," Select/Unselect letters with mouse. "
DIM wordlist$(1400),word$(22),wordon(22),puzzle$(18),rgb(WINDOW(6),2)
high=12:wide=17:words=12
temp&=PEEKL(PEEKL(PEEKL(WINDOW(7)+46)+48)+4)
FOR i=0 TO WINDOW(6)
msg$=RIGHT$("00"+HEX$(PEEKW(temp&+2*i)),3)
FOR j=1 TO 3:rgb(i,j-1)=VAL("&h"+MID$(msg$,j,1)):NEXT
NEXT
MENU 1,0,1,"System"
MENU 1,1,1,"NewColors"
MENU 1,2,1,"List "
MENU 1,3,1,"Quit "
MENU 2,0,1,"# Words"
MENU 2,1,1," 8 "
MENU 2,2,2," 12 "
MENU 2,3,1," 17 "
MENU 2,4,1," 22 "
MENU 3,0,1,"Puzzle Size"
MENU 3,1,1," 10 X 13 "
MENU 3,2,2," 12 X 17 "
MENU 3,3,1," 14 X 21 "
MENU 4,0,0,""
msgbox -1,24,2,3," reading wordlist... "
vocabulary=0
OPEN "I",#1,"wordlist"
WHILE NOT EOF(1)
vocabulary=vocabulary+1
INPUT #1,wordlist$(vocabulary)
WEND
CLOSE #1
vocabulary=vocabulary-1
ON MENU GOSUB menu0:MENU ON
GOTO doboard
SUB msgbox (x,y,pen,paper,msg$) STATIC
IF x<0 THEN
x=INT((WINDOW(2)/8-LEN(msg$))/2)+1
length=WINDOW(2)/8-2*x+2
ELSE
length=LEN(msg$)
END IF
IF y>0 AND msg$<>"" THEN
IF y>21 THEN '22 or 24
LINE (0,8*(y-1)-5)-STEP(630,16),2,bf
IF msg$<>"" THEN
button 2,y,2,0,x-4
button x,y,pen,paper,length
button 83-x,y,2,0,x-4
END IF
ELSE
button x,y,pen,paper,length
END IF
END IF
COLOR pen,paper:LOCATE ABS(y),x:PRINT msg$;
END SUB
SUB button (x,y,pen,paper,length) STATIC
LINE (8*x-15,8*y-12)-STEP(8*length+12,14),paper,bf
LINE (8*x-13,8*y-11)-STEP(8*length+8,12),pen,bf
LINE (8*x-11,8*y-10)-STEP(8*length+4,10),paper,bf
END SUB
SUB buttonup STATIC
WHILE MOUSE(0)<>0:SLEEP:WEND
END SUB
SUB whoa STATIC
CALL buttonup:WHILE MOUSE(0)=0 AND INKEY$="":SLEEP:WEND
END SUB
SUB docolors STATIC
SHARED rgb()
WINDOW 8," Palette ",(60,30)-(226,144),18,-1
FOR i=0 TO WINDOW(6)/4-1
FOR j=0 TO 3
LINE (24*(j+3) ,10*i )-STEP(23,9),4*i+j,bf
LINE (24*(j+3)+2,10*i+1)-STEP(19,7),0,bf
LINE (24*(j+3)+4,10*i+2)-STEP(15,5),4*i+j,bf
IF 4*i+j>WINDOW(6) THEN j=3
NEXT
NEXT
msgbox 2,14,0,1," RESET "
msgbox 13,14,0,1," OKAY ":COLOR 1,0
colorloop:
temp&=PEEKL(PEEKL(PEEKL(WINDOW(7)+46)+48)+4)
msg$=RIGHT$("00"+HEX$(PEEKW(temp&+2*colr)),3)
LOCATE 12,1
FOR i=0 TO 2
c(i)=VAL("&h"+MID$(msg$,i+1,1))
LINE (24*i+2,0)-(24*i+20,74-5*c(i)),0,bf
LINE (24*i+2,75-5*c(i))-(24*i+20,80),1,bf
PRINT " "MID$(msg$,i+1,1)" ";
NEXT
PRINT " color="colr;
i=MOUSE(0):i=0:WHILE i=0:i=MOUSE(0):SLEEP:WEND
IF MOUSE(3)>166 OR MOUSE(4)>114 THEN colorloop
IF MOUSE(3)>72 THEN
i=(MOUSE(3)-82)/24:j=(MOUSE(4)-5)/10
IF 4*j+i<=WINDOW(6) THEN colr=4*j+i
END IF
IF MOUSE(3)<71 AND MOUSE(4)<80 THEN
WHILE MOUSE(0)<>0
j=15-MOUSE(2)/5:i=(MOUSE(3)-10)/24
IF j=>0 AND j<16 THEN c(i)=j
PALETTE colr,c(0)/16,c(1)/16,c(2)/16
LINE (24*i+2,0)-(24*i+20,74-5*c(i)),0,bf
LINE (24*i+2,75-5*c(i))-(24*i+20,80),colr,bf
LOCATE 12,3*i+2:PRINT MID$("0123456789ABCDEF",c(i)+1,1);
WEND
END IF
IF MOUSE(4)<102 THEN colorloop
IF MOUSE(3)<88 THEN
FOR i=0 TO WINDOW(6)
PALETTE i,rgb(i,0)/16,rgb(i,1)/16,rgb(i,2)/16
NEXT
SOUND 800,1,255:SOUND 1000,1,255,1
GOTO colorloop
END IF
WINDOW CLOSE 8
END SUB